package com.ruben.state;

/**
 * 上下文 （Context） 保存了对于一个具体状态对象的引用， 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状态对象交互， 且会提供一个设置器用于传递新的状态对象。
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/10/17 18:04
 */
public class Context {

    private State state;

    public Context(State state) {
        this.state = state;
        System.out.println("初始状态为：" + this.state.getClass().getSimpleName());
        state.setContext(this);
    }

    public void changeState(State state) {
        this.state = state;
        System.out.println("变更状态为：" + this.state.getClass().getSimpleName());
        this.state.setContext(this);
    }

    /**
     * 当前状态执行的方法
     */
    public void doThis() {
        state.doThis();
    }

    /**
     * 当前状态执行的方法
     */
    public void doThat() {
        state.doThat();
    }

}

